#pragma once

#include"Common.h"


class CentralCache
{
public:
	// 单例模式(启动直接创建模式)
	static CentralCache* GetInstance() {
		return &_sInst;
	}

	// 从SpanList或者page cache获取一个span
	// GetOneSpan(桶位置, 获取内存大小)
	Span* GetOneSpan(SpanList& list, size_t size);

	// 从中心缓存获取一定数量的对象给ThreadCache
	size_t FetchRangeObj(void*& start, void*& end, size_t batchNum, size_t size);

	// 将一定数量的对象释放到span跨度
	void ReleaseListToSpans(void* start, size_t index);


private:
	SpanList _spanLists[NFREELIST];

private:
	CentralCache() {}
	CentralCache(const CentralCache&) = delete;

	static CentralCache _sInst;	//声明
};